package srcTest;

import static org.junit.Assert.*;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.embeddable.EJBContainer;
import javax.naming.NamingException;

import junit.framework.Assert;

import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;

import com.sumset.daos.CategoriaDao;
import com.sumset.daos.DenunciaDao;
import com.sumset.daos.EstadoDenunciaDao;
import com.sumset.daos.PostDao;
import com.sumset.daos.TipoDenunciaDao;
import com.sumset.daos.UsuarioDao;
import com.sumset.entidades.Categoria;
import com.sumset.entidades.Denuncia;
import com.sumset.entidades.EstadoDenuncia;
import com.sumset.entidades.TipoDenuncia;

public class DenunciaTest {

	private static EJBContainer contenedor;
	private static DenunciaDao dd;
	private static TipoDenunciaDao td;
	private static UsuarioDao  ud;
	private static EstadoDenunciaDao edd;
	private static PostDao pd;
	
	
	@BeforeClass
	public static void primerMetodo() throws Exception {
		Map<String, String> properties = new HashMap<String, String>();
		properties.put(EJBContainer.APP_NAME, "pratica_26");
		contenedor = EJBContainer.createEJBContainer(properties);
	    dd=(DenunciaDao) contenedor.getContext().lookup("java:global/pratica_26/denunciaDao");
	    td=(TipoDenunciaDao) contenedor.getContext().lookup("java:global/pratica_26/tipoDenunciaDao");
	    ud=(UsuarioDao) contenedor.getContext().lookup("java:global/pratica_26/usuarioDao");
	    edd=(EstadoDenunciaDao) contenedor.getContext().lookup("java:global/pratica_26/estadoDenunciaDao");
	    pd=(PostDao) contenedor.getContext().lookup("java:global/pratica_26/postDao");
	    
		Denuncia d = new Denuncia();//denuncia a insertar
		
		d.setId(0); //estes es  un auto incrementable
		d.setTipoDenuncia(td.buscar(1));
		d.setAsunto("eeo");
		d.setFechaInicio(new Date());
		d.setDuracion(1);
		d.setUsuarioAsignado(ud.buscar("leysonFCP"));
		d.setUsuarioDenunsiante(ud.buscar("leysonFCP"));
		d.setEstado(edd.buscar(1));
		d.setPost(pd.buscar(1));
		
		dd.insert(d);
		

	}
	
	
	
	
	@Test
	public void testInsert() throws Exception {
		
		Denuncia d = new Denuncia();//denuncia a insertar
		
		d.setId(-1); //estes es  un auto incrementable
		d.setTipoDenuncia(td.buscar(1));
		d.setAsunto("eeo");
		d.setFechaInicio(new Date());
		d.setDuracion(1);
		d.setUsuarioAsignado(ud.buscar("leysonFCP"));
		d.setUsuarioDenunsiante(ud.buscar("leysonFCP"));
		d.setEstado(edd.buscar(1));
		d.setPost(pd.buscar(1));
		
		dd.insert(d);
		
		Denuncia db=dd.buscar(-1);//la denuncia insertada traida desde la BD
		Assert.assertNotNull(db);
	}

	@Test
	public void testUpdate() throws Exception {
		Denuncia db=dd.buscar(0);//la denuncia insertada en el primer metodo primerMetodo traida desde la BD
		db.setAsunto("oee");
		dd.update(db);
		
		Denuncia dab=dd.buscar(0);//la denuncia actualizada traida desde la BD
		Assert.assertEquals("oee", dab.getAsunto());
	}

	@Test
	public void testDelete() throws Exception {
		Denuncia db=dd.buscar(-1);//la denuncia insertada en el metodo de prueba de insertar traida desde la BD
		dd.delete(db);
		Denuncia deb=dd.buscar(-1);//la denuncia eliminada traida desde la BD
		Assert.assertNull(deb);
	}

	@Test
	public void testBuscar() throws Exception {
		Denuncia db=dd.buscar(0);//la denuncia insertada en el primer metodo primerMetodo traida desde la BD
		Assert.assertNotNull(db);
	}

	@Test
	public void testListar() throws Exception {
		Denuncia db=dd.buscar(0);//la denuncia insertada en el primer metodo primerMetodo traida desde la BD
		List<Denuncia> lista=dd.listar();
		Assert.assertTrue( lista.contains(db));
	}
	
	@AfterClass
	public static void ultimoMetodo() throws Exception
	{
		Denuncia db=dd.buscar(0);//la denuncia insertada en el primer metodo primerMetodo traida desde la BD
		dd.delete(db);
	}

}
